草庐IT

Java final 与 C++ const

全部标签

c++ - 使用 decltype 将其转换为 const

我正在尝试解决一个问题,其中decltype会大大简化事情,但我在*thisdecltype遇到了问题并添加一个const限定符。下面的示例代码演示了这个问题。#includestructFoo{voidbar(){static_cast(*this).bar();}voidbar()const{std::cout代码在MSVC2010中编译,但执行递归直到发生堆栈溢出。Ideone报告编译器错误prog.cpp:Inmemberfunction'voidFoo::bar()':prog.cpp:7:38:error:'const'qualifierscannotbeappliedto

c++ - 堆分配的 const 对象与非 const 对象有何不同?

在C++中可以allocateaconstobjectonheap:constClass*object=newconstClass();const_cast(object)->NonConstMethod();//UB因此尝试写入对象将是UB。我不明白这样的对象与未声明为const的堆分配对象有何不同:constClass*object=newClass();我的意思是,当我在堆栈上分配一个对象时,它会进入特定于实现的自动存储,因此可能有一些特定于实现的方法允许分配const以某种特殊方式生成对象,当我写入对象时会产生UB。然而,每当我使用new时,编译器都需要发出operatorne

c++ - 为什么不能创建空类的 const 对象

#includeclassA{public:voidfoo()const{std::cout上面的代码无法编译,有大佬告诉我为什么吗? 最佳答案 您需要对其进行初始化。Thisisaknownproblemwiththespec. 关于c++-为什么不能创建空类的const对象,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5335836/

c++ - 在 C++ 中什么时候使用 *、& 或 const 是正确的时机?

我在研究指针引用时遇到了输入参数的不同方法。谁能解释一下每一个的实际含义?我认为第一个很简单,x是传入参数的拷贝,因此在堆栈上创建了另一个变量。至于其他的我一无所知。voiddoSomething1(intx){//code}voiddoSomething2(int*x){//code}voiddoSomething3(int&x){//code}voiddoSomething3(intconst&x){//code}我在声明变量时也看到了类似的东西。我不明白他们之间的区别。我知道第一个会将100放入堆栈上的变量y中。它不会创建新地址或任何东西。//example1inty=100;/

c++ - 如何将 int 转换为 const int 以在堆栈上分配数组大小?

我试图在堆栈上分配一个固定大小的整数数组#includeusingnamespacestd;intmain(){intn1=10;constintN=const_cast(n1);//constintN=10;cout但是,这在我使用N的最后一行给出了一个错误定义一个固定的errorC2057:expectedconstantexpression.但是,如果我定义N作为constintN=10,代码编译得很好。我应该如何输入n1将其视为constint?我试过了:constintN=const_cast(n1)但这会产生错误。编辑:我正在使用MSVC++2008来编译这个...用g++

C++ : code explanation for method prototype with const = 0

我有一个类声明,其中有一段我不理解的代码:classWeapon{public:virtualvoidattack()const=0;};const=0部分是什么意思? 最佳答案 这是一个纯虚方法(=0),不应更改类(const)的数据。您应该在派生自Weapon的类之一中提供实现!看到这个:Differencebetweenavirtualfunctionandapurevirtualfunction您应该派生自Weapon(可以认为是接口(interface))具体类,例如Axe、Shotgun等。.您将在其中提供attack(

c++ - 如何在类的头文件中定义一个 const double?

在我的类的头文件中,我正在尝试以下操作并收到编译器投诉:private:staticconstdoublesome_double=1.0;您应该如何实际执行此操作? 最佳答案 在C++11中,由于constexpr,您可以拥有非整数常量表达式:private:staticconstexprdoublesome_double=1.0; 关于c++-如何在类的头文件中定义一个constdouble?,我们在StackOverflow上找到一个类似的问题: http

c++ - const 类型限定符紧跟在函数名之后

这个问题在这里已经有了答案:Meaningof'const'lastinafunctiondeclarationofaclass?(12个答案)关闭7年前。在C++中,有时我会看到如下声明:return_typefunction_name(datatypeparameter1,datatypeparameter2)const{/*................*/}在这种情况下,这个const类型限定符究竟做了什么?

c++ - 为什么 delete 可以在指向 const 的指针上执行而 free 不能?

我刚刚注意到传递给delete的指针可以是const限定的,而传递给free的指针则不能。这对我来说真是个惊喜。在C++中,operatordelete的重载应该有如下签名:voidoperatordelete(void*p);但是给参数指针加一个const是无效的:voidoperatordelete(voidconst*p);谁能告诉我为什么delete是这样设计的? 最佳答案 free不应与实际的C++对象一起使用。free应与malloc一起使用,因此您不应在使用new分配的内容上使用free。至于为什么可以deleteco

c++ - 尽可能多地维护 "const-ness"是个好主意吗?

最近,我一直在养成一种习惯,将我的代码中的许多东西作为const:(1)函数参数,我知道永远不会改变。例如:voidfoo(constinti,conststrings)^^^^^^^^^^(2)返回类型作为const。例如:structA{...constintfoo(){return...;}^^^^^operatorconstbool()const{return...;}^^^^^};(3)整数或字符串的简单计算。例如:constuintsize=vec.size();^^^^^conststrings2=s1+"hello";^^^^^...还有其他一些地方。通常在其他现实世界